<?php

/*
| +----------------------------------------------------------------------
| | DyCode 框架[为Dy自主开发框架]
| +----------------------------------------------------------------------
| | Copyright (c) 2015-2030 https://www.ngiveup.top/
| +----------------------------------------------------------------------
| | DyCode 提供个人非商业用途免费使用，商业需授权。
| +----------------------------------------------------------------------
| | Author: dy <wdyxzkq@qq.com>
| +----------------------------------------------------------------------
|
*/

declare (strict_types=1);

use dy\Container;

if (!function_exists('dump')) {
    function dump($data = '')
    {
        echo '<pre>';
        var_dump($data);
        echo '</pre>';
    }
}

if (!function_exists('halt')) {
    function halt($data = '此处断点')
    {
        dump($data);
        exit;
    }
}

if (!function_exists('dd')) {
    function dd($data = '此处断点')
    {
        dump($data);
        exit;
    }
}

if (!function_exists('env')) {
    /**
     * Gets the value of an environment variable.
     *
     * @param string $key
     * @param mixed $default
     * @return mixed
     */
    function env($key, $default = null)
    {
        $value = getenv($key);

        if ($value === false) {
            return $default;
        }

        switch (strtolower($value)) {
            case 'true':
            case '(true)':
                return true;
            case 'false':
            case '(false)':
                return false;
            case 'empty':
            case '(empty)':
                return '';
            case 'null':
            case '(null)':
                return null;
        }

        $strLen = strlen($value);
        if ($strLen > 1 && $strLen[0] == '"' && $strLen[$strLen - 1] = '"') {
            return substr($value, 1, -1);
        }

        return $value;
    }
}

if (!function_exists('app')) {
    /**
     * 快速获取容器中的实例 支持依赖注入
     * @param string $name 类名或标识 默认获取当前应用实例
     * @param array $args 参数
     * @param bool $newInstance 是否每次创建新的实例
     * @return object
     */
    function app($name = 'dy\App', $args = [], $newInstance = false)
    {
        return Container::get($name, $args, $newInstance);
    }
}

if (!function_exists('view')) {
    /**
     * 模板缓存并输出
     * @param string $filename      模板位置
     * @param array $params         变量值
     * @param bool $isCreateTemp    是否强制刷新模板缓存
     */
    function view($filename, $params = [], $isCreateTemp = false)
    {
        //获取模板文件真实路径
        $path     = explode('.', $filename);
        $filepath = '';
        foreach ($path as $item => $value) {
            $filepath .= !$filepath ? $value : '/' . $value;
        }
        $filepath = VIEW_PATH . $filepath . '.blade.php';
        if(!is_file($filepath)){
            exit("模板文件不存在:{$filepath}");
        }

        //获取模板缓存路径
        $fileUpdateTimeStamp = filemtime($filepath);
        $tempFilePath = TEMP_PATH . MD5($filepath. $fileUpdateTimeStamp . http_build_query($params) ) . '.php';

        //生成模板缓存文件
        if($isCreateTemp || !is_file($tempFilePath)){
            //变量值
            extract($params);

            //获取文件内容
            ob_start();
            include $filepath;
            $fileContent = ob_get_contents();
            ob_end_clean();

            //写入文件
            if (!is_dir(TEMP_PATH)) {
                mkdir(TEMP_PATH, 0777, true);
            }
            file_put_contents($tempFilePath, $fileContent);
        }

        include $tempFilePath;
        exit;
    }
}
